草庐IT

GCD ③ dispatch_barrier

全部标签

objective-c - 分派(dispatch)到主队列总是失败

我正在尝试通过iOS上的GCD将一些代码分派(dispatch)到主队列,但即使是最简单的测试也总是失败。最后归结为:staticconstintTICK_INTERVAL=1;#pragmaUIApplicationDelegateimplementation-(void)doTick{if(![NSThreadisMainThread]){NSLog(@"Tryingtodispatch...");dispatch_sync(dispatch_get_main_queue(),^{NSLog(@"test...");});}}-(void)startUpdate{dispatch_

ios - 当应用程序置于后台时,GCD 调度的操作不运行

我启动了一个方法,本质上是一个使用dispatch_queue_create然后使用dispatch_async的无限循环(然后代码循环在调度block内)。循环运行完美。但是,当应用程序进入后台时,它会暂停。然后当应用程序进入前台时它会重新启动。如何防止这种情况发生?我一直在找here但似乎优先级不是我可以选择的事情之一。 最佳答案 使用-[UIApplicationbeginBackgroundTaskWithExpirationHandler:]启动后台任务的方法。操作系统会给你十分钟,并在结束时调用expirationHan

ios - GCD 对比 @synchronized 对比 NSLock

谁能简要说明这3个系统在线程安全方面的优缺点?通过观看最近的WWDC视频,我感觉到Apple正在插入GCD的使用,以创建线程安全的高性能读写器。这背后的想法/支持是什么?是时候访问必须进入导致此GCD推送的内核并回避@synchronized和NSLock的锁了吗?@synchronized和NSLock是否被排除在最佳实践之外,或者它们是否还有一席之地? 最佳答案 有很多细节可以就此进行详细讨论。但是,核心是:这些总是需要在某处或以某种方式获取锁:@synchronized(...){...}[locklock];由于您提到的原因

ios - EXC_BAD_ACCESS 在 dispatch_async 中使用 "freed"self 时

我有一个使用iOS7中新的SpriteKit编写的游戏。我有一个自定义的SKSpriteNode,它可以获取并显示Facebook个人资料图片。但是,由于加载图片可能需要一些时间。我尝试在初始化节点时在后台加载图片,并仅在加载图片时显示它。这是我写的代码片段:dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{//CodetoloadFacebookProfilepicture//...SKSpriteNode*fbFrame=[SKSpriteNodespriteNodeWithT

使用 GCD 或 NSThread 的 iOS 长时间运行操作?

我是iOS开发的新手(我最熟悉Java),我想知道启动长时间运行的线程的最佳方法是什么?只要应用程序在前台,该线程就会启动,并在它进入后台时停止。当它在前台时,它会每隔X秒轮询一次外部设备以查看它是否已连接。NSThread和Java的thread类非常相似,这让我很容易理解。我知道我可以initWithTarget:selector:object:那个类并调用start:,它会使用选择器中提供的方法启动线程。在那里,我只有一个while(true)循环,它会一直运行直到我跳出它。这是我要执行的操作的基本示例:-(void)startup{NSThread*thread=[[NSThr

ios - 我如何在 GCD 中将一个 block 添加到调度队列的前面?

我想我读过一次关于在GrandCentralDispatch中将block添加到调度队列前面的方法(这样它就不会等待其他待处理的block)。但我在GCDReference中找不到它.有谁知道这是否可能,如果可能的话如何? 最佳答案 没有公共(public)API来“跳转”队列,也没有从队列中删除或重新排序先前入队但尚未执行的block。如果你只是想让一个block以比其他block更高的优先级执行,你可以将它提交到高优先级全局并发队列,但是这样做自然会失去使用特定队列提供的任何并发保证。除此之外,您必须自己实现此功能。做到这一点的

ios - dispatch_after 会阻塞主线程吗?

我正在设置一个计时器,以便在一秒钟后为我的键盘扩展重置一个值。问题是我觉得下面的调用正在拖延我的UI:dispatch_after(dispatch_time(DISPATCH_TIME_NOW,1*NSEC_PER_SEC),dispatch_get_main_queue(),^{[selfresetDoubleTapBool];})有没有一种异步的方式来做到这一点,或者一般来说更好的方式?谢谢! 最佳答案 dispatch_after()调用本身不会阻塞。在指定的时间(或之后不久),block将被提交到主队列。提交它不会阻塞主线

cocoa-touch - 双核 iPad (A5) = Grand Central Dispatch?

iPhoneSDK是否支持GrandCentralDispatch,使我们能够利用新iPadCPU的多核优势? 最佳答案 是的,从iOS4.0开始,iOS就支持GCD。普通线程API(pthread和NSThread)从iOS2.0开始可用 关于cocoa-touch-双核iPad(A5)=GrandCentralDispatch?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/

ios - 为什么在 requestAccessToEntity :completion? 中使用 performSegueWithIdentifier 时使用 dispatch_async

当我在完成block中调用performSegueWithIdentifier时,如果我没有将调用包装在dispatch_async中,那么segue实际发生实际上需要10秒。但是,我可以做其他事情而不用将它们包装在同一个dispatch_async中,例如做核心数据工作,或者记录“事情”......关于这是如何工作以及为什么的任何见解......我迷路了。如果这里不适合提出此类问题,我深表歉意。EKEventStore*store=[[EKEventStorealloc]init];[storerequestAccessToEntityType:EKEntityTypeEventco

objective-c - iOS dispatch_async 和 NSURLConnection 委托(delegate)函数未被调用

我认为我已经编辑了这篇文章以使其更易于阅读。在dispatch_asyncblock中完成一些密集的字符串操作后,我需要调用NSUrlConnection。我调用的URL上有.htaccess身份验证,所以我不能使用同步连接。但是NSURLConnection委托(delegate)方法没有被调用。我知道URL在浏览器中大约5秒后加载,并且我已经使用没有身份验证的简单URL测试了代码,结果没有任何区别。什么阻止了调用委托(delegate)方法?此函数执行一些字符串操作,需要一段时间才能完成:-(void)performSearch{//setsomedefaultsandworkou